#!/bin/bash

##########################################
# SSOO Grupo 06 - 2012, 2° Cuatrimestre  #
#         Comando IniciarW5.sh           #
##########################################

# Este comando debe correrse sin proceso hijo, a modo de poder exportar las variables de ambiente exitosamente.
# Previamente, el comando verificara que la instalacion haya sido completa y por ultimo, enlazara el recorrido del TP iniciando el demonio.

comando_log="IniciarW5.sh"
configFile=`cat .pathInstalaW5.conf`


#Placeholder
SYSFILE=sistemas

# Muestra un listado de los archivos existentes en el directorio recibido ($1)
function mostrarDirectorio()
{
	local formato='s/^.*$/\t&/'
	ls -1 $1 | sed $formato
}

# Carga las variables de ambiente del archivo de configuración
function leerConfiguracion()
{
	if ! [ -e $configFile ]; then
		echo "El archivo de configuracion no existe"
		return 2 
	fi
	if ! [ -r $configFile ]; then
		echo "No se tienen los permisos de lectura del archivo de configuracion"
		return 3
	fi
	scriptConfig=$path'leerConfig.sh'
	if ! [ -f $scriptConfig ]; then
		echo "El comando $scriptConfig no existe"
		return 2
	fi
	if ! [ -x $scriptConfig ]; then
		echo "No se tienen los permisos para ejecutar $scriptConfig"
		return 4
	fi
	. $scriptConfig $configFile
	return 0
}

# Muestra la configuración de las variables de ambiente de este sistema
function mostrarConfiguracion()
{
	echo 'TP SO7508 Segundo Cuatrimestre 2012. Tema W Copyright © Grupo xx'
	echo 'Libreria del sistema: '$CONFDIR
	mostrarDirectorio $CONFDIR
	echo 'Ejecutables: '$BINDIR
	mostrarDirectorio $BINDIR
	echo 'Archivos maestros: '$MAEDIR
	mostrarDirectorio $MAEDIR
	echo 'Directorio de arribo de archivos externos: '$ARRIDIR
	echo 'Archivos externos aceptados: '$ACEPDIR
	echo 'Archivos externos rechazados: '$RECHDIR
	echo 'Archivos procesados: '$PROCDIR
	echo 'Reportes de salida: '$REPODIR
	echo 'Logs de auditoria del Sistema: '"$LOGDIR<comando>.$LOGEXT"
	echo 'Estado del Sistema: INICIALIZADO'
	echo 'No es posible efectuar una reinicializacion del sistema.'

	return 0
}

function verificarDirectorio()
{
	local directorio="$1"
	local lista="$2"
	local faltante=
	local cantidad=0
	for archivo in $lista; do
		if [ ! -e "$directorio$archivo" ]; then
			faltante=$faltante" $archivo"
			cantidad=`expr $cantidad + 1`
		fi
	done
	echo -e "\tComponentes existentes:"
	ls -1 $directorio | sed 's/^.*$/\t\t&/'
	echo -e "\tComponentes faltantes: $cantidad"
	for archivo in $faltante; do
		echo -e "\t\t$archivo"
	done
	return $cantidad
}

# Verifica que todos los componentes de la instalación existan
function verificarInstalacion()
{
	local faltantes=0
	echo "Ejecutables: $BINDIR"
	verificarDirectorio $BINDIR "$LISTA_BINDIR"
	faltantes=`expr $faltantes + $?`
	echo "Archivos maestros: $MAEDIR"
	verificarDirectorio $MAEDIR "$LISTA_MAEDIR"
	faltantes=`expr $faltantes + $?`
	return $faltantes
}

dirActual=$PWD
path=`readlink -f "${BASH_SOURCE[0]}"`
path=${path%'/'*}'/'
echo $path
LOGGER_EXE="perl ${path}LoguearW5.pl"
cd $path

# Verificar si el proceso está siendo invocado como hijo
if [ ${0##*/} != 'bash' ]; then
	echo "Error: IniciarW5 no debe ser corrido como proceso hijo."
	$LOGGER_EXE -a -m="El comando Iniciar se ejecuto como proceso hijo. Imposible inicializar el sistema." -l="IniciarW5.sh"
	exit -1
fi

# Verificar si el ambiente fue inicializado previamente
if [ ! -z $ambienteInicializado ]; then
	$LOGGER_EXE -m="Comando $comando_log ya fue ejecutado." -a -l="$comando_log" > /dev/null
	mostrarConfiguracion
	echo 'Proceso de Inicializacion Cancelado'
	return 1
fi

leerConfiguracion
codigo=$?
if [ $codigo -ne 0 ]; then
	cd $dirActual
	return $codigo
fi

# Iniciar el archivo de log
$LOGGER_EXE -m="Comando $comando_log Inicio de Ejecucion" -i -l="$comando_log" > /dev/null

# Añadimos el directorio de ejecutables al path del sistema
PATH=$PATH:$BINDIR
export PATH

verificarInstalacion
codigo=$?
echo "Se termino de verificar la instalacion con codigo de salida $codigo"
if [ $codigo -ne 0 ]; then
	echo "Instalacion incompleta!"
	$LOGGER_EXE -m="La instalacion no esta completa. Reinstalar antes de volver a iniciar el ambiente." -a -l="$comando_log" > /dev/null
	return 4
fi

# El ambiente se inicio con exito
ambienteInicializado=1
export ambienteInicializado
$LOGGER_EXE -m="Se termino de iniciar el ambiente con exito." -i -l="$comando_log" > /dev/null
# exporto la funcion de mover al ambiente
source ./moverW5.sh

# Verificar si DetectaW5 está corriendo en la sesión y sino ejecutarlo en background
./startD.sh > /dev/null 
pid_detecta=$(pidof -x detectaW5.sh)
if [ "1" != "${pid_detecta}1" ]; then
	$LOGGER_EXE -m="Se inicio el demonio DetectaW5. PID: ${pid_detecta}." -i -l="$comando_log"
fi

cd $dirActual
return 0
